10 инди игр от новых авторов

Я связался с 10 разработчиками инди игр и они предоставили информацию о своем творении. Игры совершенно разные — как проработки качества, так и жанры. Составом команд и бюджетов. Некоторые из них поделились цифрами о том, сколько вложили денег в разработку.

Some Space Story

В игре вам предстоит играть за НЛО, путешествовать по разным галактиками, исследовать вселенную, уворачиваясь от космических препятствий, уничтожать и грабить планеты.

Обитатели одной из далеких и не опознанных галактик решили выдвинуться в путь, чтоб уничтожать все виды планет, которые встретятся им на пути и очистить целую вселенную от всего что не касается их неопознанного вида.

Постарайтесь долететь как можно дальше, уничтожить как можно больше планет, собрать как можно больше ресурсов. Стреляйте во всё на своем пути, уничтожайте метеориты и планеты, собирайте ресурсы, покупайте новые НЛО и боеприпасы, прокачивайте характеристики и оружие, открывайте новые галактики.

Игру разрабатывает один человек на протяжении 5 месяцев (по времени около 50 часов), с помощью движка Game Maker Studio 2.

Разработчик старался сделать игру максимально качественно, уделяя внимание каждым мелочам. Проект делался в первую очередь для пользователя, чтоб ему было приятно играть не отвлекаясь ни на что. Из-за этого проект выходит бесплатным и без какой-либо авто рекламы, пользователь сам может поддержать разработчика посмотрев её, но только по своему желанию. По начало графика должна была быть казуальная, но под конец проекта создатель решил сделать весь проект сам на 100%, чтобы не нуждаться и не быть зависимым от кого-то и сделать все именно таким каким он его себе  представляет. По этому он решил переделать все под пиксельный стиль.

Дальнейшие планы разработчика поддерживать игру обновлениями и начало нового проекта.

Игра

BaDoom Corporation

2D-игра в жанре шутер, в которой придется летать и уворачиваться от препятствий, попутно стреляя и уничтожая врагов на своем пути.

Мчитесь со всех ног и летайте, подбирая самое зубодробительное и мощное оружие, чтобы сметать с пути орды монстров и огромных боссов! Прорвитесь через мир, в котором свирепствуют монстры!

Игру разрабатывает один человек полтора месяца, с помощью движка Unity.

В игре нужно пройти как можно больше дистанции, чтобы побить рекорды других игроков. С каждой минутой врагов и препятствий становится все больше и больше, а шанс всего один!

Дальнейшие планы разработчика совершенствовать игру дальше новыми апдейтами и монстрами, в новом апдейте Вас ожидают новые уровни, монстры и персонажи.

Игра

The Great Tribes

Это пошаговая стратегия, в которой игроку предстоит создать собственную уникальную цивилизацию и испытать свои силы в ее развитии в нелинейном, постоянно меняющемся мире. Возглавьте кочевое племя и держите в страхе весь континент, либо отражайте атаки кочевников, управляя оседлой цивилизацией.

Над разработкой трудится команда из 7 человек на протяжении 6 лет и по сегодняшний день, движок использовался созданный самостоятельно командой, а бюджет игры составил 1,000,000 рублей.

В последний год к проекту присоединилось несколько человек, которые начали вносить весомый вклад. Это несколько художников по концептам, моделлер, программисты (которые cподвигли создателя игры пересесть на более современные инструменты разработки), историки и сценаристы. Работа пошла живее!

Был проделан большой фронт работы. Важным событием для проекта, был переход c системы управления версиями SVN на GIT и переход с Ant на инструмент сборки Gradle. А еще разработчик отказался от привычного NetBeans и пересел IntelliJ IDEA. Да и полноценное тестирование на Linux, тоже было важной вехой в истории.

Дальнейшие планы команды дальше работать над проектом и улучшать его.

Игра

Eraser

Это игра на выживание в мире бесконечного хардкора, где вы совершенствуетесь с каждым уникальным сражением.

Над проектом трудится команда из двух человек, на протяжении 9 месяцев, разрабатывается игра с помощью движка Unreal Engine 4, а бюджет составил $100 для Steam Direct.

Ваша цель проста — выжить, но это будет не так просто. Толпы голодных и кровожадных мутантов только и ждут момента, чтобы разорвать вас на части. Сможете ли вы продержаться достаточно долго.

Интересный факт — один из игроков смог полностью пройти игру с дефолтным пистолетом, но не говорит как. Хотя даже разработчики за все время тестирования не смогли этого сделать.

Дальнейшие планы команды — поддержка проекта, и работа над созданием новых.

Игра

Air Force: Sky Fighters

Это динамичный экшен, воздушные бои, уникальные истребители и ураганные полеты в глубоких каньонах.

Над проектом трудится команда из трех человек, на протяжении двух лет, разрабатывается игра с помощью движка Unity.

Многочисленные враги обладают мощным вооружением, но твои навыки полета и надёжные истребители позволят одержать верх над любым противником. Уничтожай базы, прорывайся сквозь укрепления и обрушивай ярость на обидчиков. Пусть их истребители падают на землю, никто не сможет остановить твою стремительную атаку.

Изначально в планах разработчиков было сделать леталку с видом сверху, ориентируясь на игры типа Sky Force и Hawk. После участия в конкурсе от Gamedev поняли, что проект в таком виде игрокам не интересен. Стали переделывать игру, на ходу придумывая новые механики.

Дальнейшие планы разработчиков поддерживать игру апдейтами, поиск издателя, а также параллельная разработка новой игры.

Игра

Chess Royale

Нестандартная шахматная игра, в которой короли обладают магической силой. Игроку необходимо срубить вражеского короля, выстраивая победоносную тактику, комбинируя череду ходов и магические способности.

Проект создавался одним человеком, разрабатывалась игра с помощью движка Unity, а вложенный бюджет составил 120 000 рублей. 

Это был первый собственный проект разработчика, и было допущено достаточно ошибок при разработке.

Изначально игра делалась под мобильные, не было продумано нормальное ТЗ, было тупое желание сделать собственный проект. 

По ходу разработки несколько раз переделывалась. Благо был хороший художник фрилансер, который помог определиться с некоторыми вещами.

После выпуска на андроид своими силами разработчик закупал трафик, но результаты были около нуля.

Затем разработчик захотел получить опыт публикации в стим и решил попробовать с этой игрой. Продвигал своими силами в соц сетях. На стиме игра заработала на текущий момент $150 и 350 виш листов.

Дальнейшие планы разработчика это работа над новыми проектами.

Игра

RUNGORE

Пиксельный, динамичный, карточный рогалик без очередей, ходов и очков действий. Мы называем это карточный битемап.

Парень бежит вперед по подземелью и пробивает своих врагов пополам. После каждого боя он подбирает карты, которые может использовать в следующем бою, карты можно использовать только один раз. Карты могут варьироваться от «атаковать врага» до «стать вознесенным БОГОМ на 5 секунд».

Здесь нет стандартного повествования. Вы чувствуете игру через ее эстетику. Единственные фрагменты повествования раскрываются через подтекст. Например, намекая на то, что происходит на самом деле, через фоны уровней или дизайн врагов.

Над проектом трудятся 2 основных разработчика (код+геймдизайн и арт+геймдизайн) и N-ое количество аутсорса (музыка, несколько артов и т.д.). Плюс один человек в роли продюсера, который пытается в продвижение (помимо издателя) , игра разрабатывается с помощью движка Game maker на протяжении двух лет и по сегодняшний день. Прототип был сделан на джеме в апреле 2021 года. Тема — «нет времени объяснять» (тема отлично легла на жанр игры). Основная разработка началась в марте 2022 года. Сейчас есть бесплатный пролог. Разработка основной игры продолжается до сих пор.

Rungore вдохновлен Slay The Spire и Loop Hero. Объединив механики из этих двух игр вместе, команда добилась постоянного давления на игрока, что повысило динамику игры за счет того, что решения приходится принимать в реальном времени.

После релиза ПК версии есть планы заняться разработкой полноценной мобильной версии. Планируют не просто сделать порт (как например сделали dead cells), а полноценную мобильную версию (как my friend pedro) со своим геймплеем, циклом и т.д.

На данный момент разработчики продолжают разрабатывать игру. Участвуют в различных фестивалях, выставках для дополнительного продвижения игры. Планируемый релиз в 1ом квартале 2023 года.

Игра

Kingdom War

Игра в жанре Tower Defence со своими особенностями. В ней вам предстоит собирать и прокачивать свой отряд защитников, обустраивать свой замок, открывать новые боевые башни для замка, которые помогут в защите вашего королевства. Исследовать карту, спускаться в подземелья, грабить караваны и уничтожать гнусных орков!

В разработке участвовало три человека. Основной разработчик, художница и саунд дизайнер.

В планах, после выхода в ранний доступ, найти ещё людей в команду, как минимум ещё художника, так как чтобы успеть выпустить игру в 2022 году пришлось немного урезать контент и оставить его на дальнейшие обновления. Игра разрабатывается с помощью движка Unity на протяжении 7 месяцев.

Команда играла в различные игры схожей тематики, интересные идеи записывали и пробовали реализовывать у себя. Несколько раз переделывали кормеханику проекта, изначально планировали сделать мёрдж войска.

Смотрели на такие игры как: Kingdom Defence, What The Hen, Towerlands, Dead Ahead и другие.

Так как это первый командный проект, команда планирует изучить все допущенные ошибки и исправлять их.

Пытаются плотно взаимодействовать с подписчиками, они очень ценят каждое сообщение и пожелание. Поэтому если будет желание, обязательно оставьте фидбэк. Так например они начали добавлять микро-пасхалки, один из подписчиков предложил добавить грабёж каравана, некоторые идеи были реализованы, некоторые записаны, чтобы реализовать их для следующих обновлений.

Дальнейшие планы разработчиков работать над обновлениями, в планах добавить пару режимов с новыми врагами и боссами, новых персонажей и будут ориентироваться на фидбек игроков.

Также планируют расширить команду и повышать свой скилл дальше, начать разработку нового проекта параллельно с поддержкой старого.

Игра

Theory of Poltaran

Это сюжетная игра в жанре приключенческого экшна, где игроку предстоит пережить историю обычного парня, у которого в один день изменилась жизнь после телефонного звонка. Основной сюжет игры повествуется в катсценах и диалогах, а также с убийством монстров из лабораторий, с которых падают записки, раскрывающие тайны игры.

События разворачиваются в небольшом родном городке главного героя Дэниэла, который жил спокойной размеренной жизнью до утреннего звонка на телефон… с этого момента его жизнь изменилась. Теперь она сосредоточена на сборе тех самых камней, способных спасти нашу галактику от гибели. Многократные нападения монстров из лаборатории, поиски камней, и быстрые захватывающие действия, ожидает вас в этой игре.

Во время прохождения, важно следить за показателями Дэниела: здоровьем и энергией. И если расходовав последнюю, персонаж всего лишь временно не сможет бегать, то если не останется здоровья, главный герой умрет. В таком случае игра вернется к последнему сохранению. Во время битв на экране также появляется показатель жизни врага, чтобы игрок мог грамотно рассчитать свои возможности.

Над проектом трудились два человека на протяжении двух с половиной лет, разрабатывалась игра с помощью движка Unreal Engine 4. Игра была написана полностью на Blueprint, без использования программного кода.

Дальнейшие планы разработчиков поддерживать игру обновлениями, сезонными обновлениями, а также выпуск совершенно новой игры.

Игра

Death Battle

Это бесконечная битва в которой вы играете за (Карточника) главного героя решившегося победить смерть, битва будет долгой. По ходу боя вы подбираете различные карты, которые как усиливают вас, так и усложняют геймплей, открывают новые механики и т.д. Концепция простая, убил босса — получил карту. Но чаще всего карты отрицательные и только усложняют геймплей.

Проект создавался одним человеком. На протяжении трех недель, разрабатывалась игра с помощью движка ClickTeam Fusion 2.5 Developer.

Изначально создатель делал другую игру. Бой со смертью был отдельной фазой этой игры, в последствии эта фаза переросла в отдельную игру.

Дальнейшие планы разработчика — исправление багов, Добавление Мультиплеера пока на 2-х человек, потом возможно до 4. Добавление контента в виде новых карт, фаз Смерти (антагониста), отдельных меню с выбором карт, с которыми игрок начинает забег, добавление ачивок. Ну и выпуск игры в стим или VkPlay.

Игра

Заключение

Еще я создал канал в Telegram где делюсь информацией о новинках и их заработке. В Youtube делаю обзоры на игры.


ссылка на оригинал статьи https://habr.com/ru/post/709518/

Создаем свой загрузочный диск Linux

В статье описывается, как создать собственный загрузочный диск Linux (оптический диск или флешку), добавить в него только нужные программы и убрать все лишнее. Полученный образ в экспериментах занял менее 25 Мб. Он позволяет быстро загружаться, работать в текстовом режиме, создавать, редактировать, удалять файлы на разных файловых системах, имеет поддержку русского языка. За основу взят Debian.

Для того, чтобы создать загрузочный диск, необходимо создать его образ, iso-файл, который затем можно записать на оптический диск или флешку. В общем случае порядок загрузки выглядит следующим образом:

Порядок загрузки Linux
Порядок загрузки Linux

Подготовка

Для начала необходимо создать пустой каталог livecd, в котором будет проводиться дальнейшая работа. В нем необходимо создать подкаталог iso, в котором будет формироваться образ диска.  Используемые в статье названия файлов и каталогов не являются обязательными. Если какое-то название является обязательным, об этом будет указано.

Добавление загрузчика UEFI

Для добавления загрузчика UEFI понадобятся файлы, которые могут отсутствовать на компьютере. Чтобы их получить, необходимо установить ряд пакетов:

apt install grub-efi-amd64-bin dosfstools mtools

Далее в каталоге livecd необходимо создать вспомогательные файлы:

grub.cfg:

set timeout=1 menuentry 'Live CD' {     linux    /linux }

grub-inst.cfg:

search --file --set=root /grub.cfg if [ -e ($root)/grub.cfg ]; then set prefix=($root) configure $prefix/grub.cfg else echo can't find grub.cfg fi

Загрузчик добавляется командой:

cp grub.cfg iso/grub.cfg mkdir -p EFI/BOOT grub-mkimage --prefix '' --config "grub-inst.cfg" -O x86_64-efi -o 'EFI/BOOT/bootx64.efi' acpi appleldr boot configfile efi_gop efi_uga elf fat fixvideo font gettext gfxmenu gfxterm gfxterm_background gfxterm_menu iso9660 linux memdisk minicmd normal part_gpt part_msdos search sleep usb video video_bochs video_cirrus video_fb videotest mkdosfs -F12 -n "EFI" -C iso/efiboot.img 2048 mcopy -s -i iso/efiboot.img EFI :: rm -r EFI

В результате в каталоге iso появятся два файла: grub.cfg и efiboot.img.

Добавление загрузчика BIOS

На древних компьютерах UEFI отсутствует. Вместо этого там используется BIOS. Чтобы создаваемый диск мог загружаться на таких компьютерах тоже, необходимо добавить загрузчик BIOS. Для получения файлов необходимо установить ряд пакетов:

apt install isolinux syslinux-common

Далее в каталоге livecd необходимо создать вспомогательный файл (отступ не обязателен):

syslinux.cfg:

UI menu.c32 PROMPT 0 TIMEOUT 1 MENU TITLE Boot Menu LABEL default MENU LABEL Live CD linux linux initrd init.ram 

После этого нужно выполнить команды:

cp syslinux.cfg iso cp /usr/lib/ISOLINUX/isolinux.bin iso cp /usr/lib/syslinux/modules/bios/{ldlinux.c32,menu.c32,libutil.c32,libcom32.c32} iso

В результате в каталоге iso появится еще ряд файлов.

Создание образа и диска

Образ (файл livecd.iso) создается командой:

xorriso -as mkisofs -r -o livecd.iso -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -partition_offset 16 -J -l -joliet-long -c boot.cat -b isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e efiboot.img -no-emul-boot -isohybrid-gpt-basdat iso

Далее эта команда будет называться (1). Образ записывается на оптический диск командой:

wodim livecd.iso

Образ записывается на флешку командой (будем считать, флешка является устройством /dev/sdz):

dd if=livecd.iso of=/dev/sdz

Указывать нужно саму флешку, а не раздел на ней, то есть /dev/sdz, но не /dev/sdz1.

Удалить linux с флешки и отформатировать ее обратно можно командой:

wipefs -a /dev/sdz mkfs.exfat /dev/sdz

Проверка работоспособности созданного образа

Проверить созданный образ можно как на настоящем компьютере, так и с помощью виртуальной машины. Например, в VMware можно создать новую виртуальную машину без жесткого диска, но с CD-приводом, в качестве образа указать файл livecd.iso. Переключение между UEFI и BIOS осуществляется в настройках этой виртуальной машины в разделе Options –  Advanced – Firmware type.

Переключение между UEFI и BIOS в VMware
Переключение между UEFI и BIOS в VMware

При загрузке в режиме UEFI отобразится меню загрузчика:

Загрузчик GRUB
Загрузчик GRUB

Загрузчик попытается загрузить Linux, но поскольку он еще не добавлен, отобразится сообщение об ошибке «file /linux not found».

При загрузке в режиме BIOS отобразится меню загрузчика:

Загрузчик Syslinux
Загрузчик Syslinux

Поскольку Linux еще не добавлен, это меню уйдет в бесконечный цикл.

Добавление ядра Linux

Ядро Linux обычно хранится в каталоге /boot и представляет собой файл с названием «vmlinuz-XXX», где XXX — версия ядра. Добавить текущее ядро в создаваемый образ можно командой:

cp $(ls -t /boot/vmlinuz-$(uname -r) | head -n 1) iso/linux

После этого в каталоге iso появится файл linux. Далее необходимо пересобрать образ командой (1), указанной выше в разделе «Создание образа и диска».

Чтобы не зависеть от версии ядра, указанной здесь командой «cp $(ls -t …» ядро не просто копируется, а переименовывается в linux без указания версии. Именно это имя файла указано вторым элементом в файлах grub.cfg и syslinux.cfg в строке «linux linux». Если в каталоге /boot имеется несколько ядер, можно использовать любое, главное, запомнить его версию. Далее в статье будет рассматриваться использование текущего ядра.

После добавления ядра загрузчики UEFI и BIOS перестанут ругаться на его отсутствие и запустят его выполнение. В свою очередь ядро успешно запустится и, в условиях отсутствия файловой системы, выдаст сообщение об ошибке «Kernel Panic. Unable to mount root fs».

Добавление файловой системы

В данной статье в качестве корневой файловой системы рассматривается использование временной файловой системы, которая размещается в оперативной памяти (initramfs). Для ее создания необходимо создать в каталоге livecd подкаталог initramfs, в нем пустой файл с названием init. Файл с таким названием почему-то обязательно должен быть и находиться в корне файловой системы, иначе ядро проигнорирует такую initramfs. Далее необходимо выполнить команды:

cd initramfs find . | cpio -o -H newc --owner=root.root | gzip -9 > ../iso/init.ram cd ..

В результате в подкаталоге iso появится файл init.ram. Его необходимо указать в файле grub.cfg, добавив перед закрывающей фигурной скобкой строку «initrd /init.ram».

grub.cfg:

set timeout=1 menuentry 'Live CD' {     linux    /linux     initrd   /init.ram }

В конец файла syslinux.cfg нужно добавить строку «initrd init.ram».

syslinux.cfg:

UI menu.c32 PROMPT 0 TIMEOUT 1 MENU TITLE Boot Menu LABEL default MENU LABEL LiveCD linux linux initrd init.ram

После этого необходимо пересобрать образ командой (1), указанной выше в разделе «Создание образа и диска». Теперь при загрузке Linux будет сообщать об ошибке «Kernel Panic. No working init found». В данном случае это сообщение означает, что ядро успешно запустилось и даже признало файловую систему initramfs, нашло в нем файл init и попыталось его запустить, но не получилось, потому что этой пустой файл.

Минимальный работающий init

В каталоге initramfs нужно создать следующую структуру файлов:

├─lib (каталог с двумя файлами) │ ├─ ld-linux-x86-64.so.2 (из /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2) │ └─ libc.so.6 (из /lib/x86_64-linux-gnu/libc.so.6) ├─lib64 (символическая ссылка на lib) └─init (из /bin/dash)

В initramfs должен получиться один подкаталог lib с двумя файлами в нем, одна символическая ссылка lib64 и один файл init. В скобках указано, какие файлы нужно взять из текущего работающего компьютера. Файлы должны быть исполняемыми. Далее необходимо пересобрать образ командами:

cd initramfs find . | cpio -o -H newc --owner=root.root | gzip -9 > ../iso/init.ram cd .. xorriso -as mkisofs -r -o livecd.iso -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -partition_offset 16 -J -l -joliet-long -c boot.cat -b isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e efiboot.img -no-emul-boot -isohybrid-gpt-basdat iso

Далее эти команды будут называться командой (2).

Если все сделать правильно, получится минимальный работающий образ с командной строкой. В моем случае его размер составил чуть более 12 Мб. В командной строке не работают никакие команды, они будут добавлены позже. Если по-прежнему отображается сообщение об ошибке «No working init found», необходимо проверить:

  1. Названия файлов, каталога и символической ссылки.

  2. Права доступа: в каталог можно зайти, файлы должны быть исполняемыми.

  3. Файлы предназначены для одной архитектуры x86_64. На некоторых компьютерах могут одновременно быть установлены 32 и 64 битные версии программ и библиотек. Узнать архитектуру файла можно командой objdump -p <имя файла>. В начале вывода должна быть строка типа «формат файла elf64-x86-64».

Если завершить работу командной строки командой exit, ядро выдаст ошибку «Kernel Panic. Attempted to kill init». Командная строка была первым и единственным процессом (PID=1) и после его завершения ядро не знает, что делать дальше.

Наполнение initfamfs простыми программами

Простой программой здесь называется программа, состоящая из одного исполняемого файла, например dash, mkdir, mount. В противоположность сложные программы содержат большое количество обязательных дополнительных файлов, например: текстовые, аудио и видеоредакторы, браузеры и т.п.

По сложившейся традиции программы размещаются в каталоге bin. В каталоге initramfs нужно создать подкаталог bin и скопировать туда файл ls из одноименного каталога работающей системы.

Многие программы в своей работе используют вспомогательные so-файлы (программные библиотеки), без которых они не запустятся. Узнать, какие so-файлы нужны программе, можно с помощью уже упоминавшейся команды objdump -p <имя файла>.

Вывод команды «objdump -p ls»:

… Динамический раздел: NEEDED libselinux.so.1 NEEDED libc.so.6 …

Файл libc.so.6 в initfamfs уже есть, а вот файл libselinux.so.1 нужно найти на работающем компьютере и скопировать в каталог initramfs/lib к другим so-файлам. Список каталогов, в которых нужно искать требуемый so-файл, можно взять из файлов /etc/ld.so.conf и /etc/ ld.so.conf.d/*. Библиотека libselinux.so.1 в свою очередь также зависит от других библиотек. С помощью команды objdump -p libselinux.so.1 можно узнать, что кроме уже имеющихся файлов libc.so.6 и libc.so.6 дополнительно требуется libpcre2-8.so.0. На работающей системе этот файл представляет собой символическую ссылку на файл libpcre2-8.so.0.11.0. При копировании в initramfs можно оставить имеющуюся структуру, т.е. скопировать libpcre2-8.so.0 как символическую ссылку и далее скопировать файл libpcre2-8.so.0.11.0. Можно поступить по-другому и скопировать файл libpcre2-8.so.0.11.0, переименовав его в libpcre2-8.so.0. Команда objdump -p libpcre2-8.so.0 показывает, что каких-либо других so-файлов, отсутствующих в initramfs, больше не требуется. В результате должна получиться следующая структура каталога initramfs:

├─bin │ └─ ls ├─lib │ ├─ ld-linux-x86-64.so.2 │ ├─ libc.so.6 │ ├─ libpcre2-8.so.0 │ └─ libselinux.so.1 ├─lib64 (=> lib) └─init

В скобках указана символьная ссылка.

При копировании so-файлов нужно не забывать проверять их архитектуру, если на компьютере есть файлы разных архитектур.

С помощью команды (2) из раздела «Минимальный работающий init» можно пересоздать образ, запустить и убедиться, что команда ls работает.

Автоматизация наполнения initfamfs простыми программами

В предыдущем разделе показано, что добавление простых программ требует рекурсивного поиска и копирования дополнительных so-файлов. Эту задачу можно автоматизировать, написав свой скрипт, либо используя программу copyso. При ее использовании достаточно указать требуемые для копирования программы, после чего выполнить еще несколько команд, чтобы сформировать оставшуюся часть структуры каталогов. В каталоге livecd необходимо заново создать пустой подкаталог initramfs и выполнить следующие команды:

copyso -p dash ls ln mkdir cat mount initramfs ln -s lib initramfs/lib64 ln -s x86_64-linux-gnu/ld-linux-x86-64.so.2 initramfs/lib64/ld-linux-x86-64.so.2 ln -s usr/bin/dash initramfs/init

Первая команда копирует программы dash, ls, ln, mkdir, cat, mount. Остальные нужны, чтобы правильно сформировать структуру каталогов.

Получившаяся структура каталогов
├─lib │ ├─x86_64-linux-gnu │ │ ├─ ld-linux-x86-64.so.2 │ │ ├─ libblkid.so.1 (=> libblkid.so.1.1.0) │ │ ├─ libblkid.so.1.1.0 │ │ ├─ libc.so.6 │ │ ├─ libmount.so.1 (=> libmount.so.1.1.0) │ │ ├─ libmount.so.1.1.0 │ │ ├─ libpcre2-8.so.0 (=> libpcre2-8.so.0.11.0) │ │ ├─ libpcre2-8.so.0.11.0 │ │ └─ libselinux.so.1 │ └─ ld-linux-x86-64.so.2 (=> x86_64-linux-gnu/ld-linux-x86-64.so.2) ├─ lib64 (=> lib) ├─usr │ └─bin │   ├─ cat │   ├─ dash │   ├─ ln │   ├─ ls │   ├─ mkdir │   └─ mount └─ init (=> usr/bin/dash)

В скобках указаны символьные ссылки.

После этого можно командой (2) из раздела «Минимальный работающий init» пересоздать образ, запустить и убедиться, что добавленные команды работают.

Добавление программ посложнее

Универсальный способ копирования сложных программ в initramfs предложить сложно. В самый неожиданный момент времени такая программа может обратиться к какому-нибудь файлу, который нигде не указан, но подразумевается автором программы и даже создается при штатной установке. Описываемый в статье способ подразумевает копирование существующих программ, а не их полноценную установку. Однако можно предложить способ, основанный на особенностях deb-пакетов в операционной системе Debian. В каталоге /var/lib/dpkg/info есть list-файлы для каждого установленного пакета. В этих list-файлах содержится перечень файлов, созданных при установке пакета. Не все из них являются обязательными, но, как сказано выше, с каждым нужно разбираться индивидуально либо копировать все, что есть. Для копирования всего пакета можно использовать следующий скрипт:

DEBS="e2fsprogs mc" copy_deb() { for F in $(cat /var/lib/dpkg/info/$1.list); do if [ -d $F ]; then mkdir -p initramfs$F elif [ -f $F ]; then copyso $copy_params /$F initramfs fi done } for DEB in $DEBS; do copy_deb $DEB done rm -rf initramfs/usr/share/{applications,doc,doc-base,info,man,lintian,libc-bin,locale,menu,pixmaps}

В первой строке перечисляются нужные пакеты (в примере их два), дальнейшие команды копируют файлы. Последняя команда удаляет файлы, которые скорее всего не понадобятся.

Если добавить таким образом Midnight Commander (команда mc), можно убедиться, что он запустится (условно). Скорее всего, таким вы его еще не видели.

Добавление модулей ядра

Модули ядра это файлы с расширением «ko», которые расположены в подкаталогах каталога /lib/modules/<версия ядра>/. Есть модули для работы с жесткими дисками, с разными файловыми системами, с устройствами USB и т.д. Составление перечня модулей, необходимых для каждого конкретного устройства, в данной статье не рассматривается. Предполагается, читатель знает, какие именно модули ему нужны.

Доя добавления нужных модулей в initramfs нужно скопировать их в формируемую файловую структуру с сохранением пути. Например, модуль для работы с жесткими дисками /lib/modules/6.0.0-6-amd64/kernel/drivers/scsi/sd_mod.ko нужно скопировать в initramfs/lib/modules/6.0.0-6-amd64/kernel/drivers/scsi/sd_mod.ko, создав недостающие каталоги (на момент написания статьи использовалось ядро версии 6.0.0-6-amd64).

Как и so-файлы, ko-файлы могут требовать для своей работы наличия других ko-файлов. Эти зависимости указаны в файле /lib/modules/<version>/modules.dep. В частности, sd_mod.ko зависит от scsi_mod.ko, scsi_common.ko, crc64.ko и других. Их также необходимо скопировать с сохранением пути и учетом того, что они, в свою очередь, могут зависеть от других модулей и так далее рекурсивно.

Эту задачу, как и предыдущую, можно автоматизировать, написав свой скрипт, либо используя программу copyko. При ее использовании для добавления модулей ядра необходимо выполнить команды:

copyko ahci sd_mod initramfs/lib/modules/$(uname -r) cp /lib/modules/$(uname -r)/modules.builtin* initramfs/lib/modules/$(uname -r) depmod -b initramfs

Первая команда копирует модули ahci и sd_mod в initramfs. Вторая копирует информацию о модулях (функционале ядра), которые уже встроены в ядро. Последняя команда создает информацию о зависимостях модулей друг от друга. Стоит отметить, что речь идет только о дисках SATA. При работе в VMware, если жесткий диск представлен как SCSI, дополнительно необходим модуль mptspi. При работе с другими дисками, например NVMe, нужны свои модули.  Также понадобится программа modprobe:

copyso -p modprobe initramfs

После обновления образа командой (2) можно загрузиться с него и проверить, что появился доступ к жесткому диску компьютера. Для этого в командной строке созданного образа необходимо выполнить команды:

mount -nt devtmpfs none /dev modprobe ahci modprobe sd_mod

При использовании других типов дисков, отличных от SATA, необходимо загрузить соответствующие им модули. После выполнения указанных команд в каталоге /dev/ появятся устройства типа sda, sda1, sda2, обозначающие найденные жесткие диски и разделы на них. Для автоматической загрузки всех имеющихся модулей можно использовать команду:

for m in $(find /lib/modules -name '*.ko'); do modprobe $(basename -s .ko $m); done

Использующиеся здесь программы find и basename нужно заранее добавить в образ. Чтобы эта команда выполнялась автоматически, нужно создать загрузочный скрипт:

#!/usr/bin/dash mount -nt devtmpfs none /dev for m in $(find /lib/modules -name '*.ko'); do modprobe $(basename -s .ko $m); done /usr/bin/dash

Этот скрипт нужно сохранить в файл initramfs/init вместо созданной ранее символической ссылки, и сделать его исполняемым.

Помимо указанных двух модулей скорее всего понадобится множество других. Для автоматизации их добавления можно предложить скрипт:

Скрипт добавления популярных модулей
KERVER=$(uname -r) MODS="sr_mod sd_mod ahci mptspi"  # Для оптических и жестких дисков: MODS="$MODS sg evdev ata_generic ata_piix libsas uas mptsas" for m in $(find /lib/modules/$KERVER/kernel/drivers/ata/ -name 'sata*.ko'); do MODS="$MODS $(basename -s .ko $m)"; done  # Для SSD дисков: for m in $(find /lib/modules/$KERVER/kernel/drivers/nvme/ -name '*.ko'); do MODS="$MODS $(basename -s .ko $m)"; done  # Файловые системы: MODS="$MODS squashfs overlay ext4 vfat exfat fuse udf isofs loop hfsplus libcrc32c crc32c-intel crc32c_generic"  # Языковые кодировки файловых систем: for m in $(find /lib/modules/$KERVER/kernel/fs/nls/ -name '*.ko'); do MODS="$MODS $(basename -s .ko $m)"; done  # USB: MODS="$MODS ehci-pci ohci-pci uhci-hcd xhci-pci usbhid i2c-hid psmouse hid-generic"  # EFI: MODS="$MODS efivarfs"  copyko $MODS initramfs/lib/modules/$KERVER cp -uf /lib/modules/$KERVER/modules.builtin* initramfs/lib/modules/$KERVER depmod -b initramfs 

Настройка консоли

Далее приводится несколько рекомендаций, как настроить консоль образа, сделать ее более удобной. Для этого требуется программа настройки консоли:

apt install console-setup

Чтобы в Midnight Commander заработали клавиши со стрелками, необходимо добавить в образ нужный файл командами:

mkdir -p initramfs/lib/terminfo cp -r /lib/terminfo/l initramfs/lib/terminfo

Чтобы Midnight Commander стал цветным, необходимо добавить цвета в образ:

cp -r /usr/share/mc/{skins,syntax,mc.charsets,mc.lib} initramfs/usr/share/mc

Чтобы Midnight Commander не выдавал сообщение «Pipe failed» при попытке редактирования файлов:

mkdir initramfs/bin ln -s /usr/bin/dash initramfs/bin/sh

Чтобы отображался текст на русском языке, нужно добавить русский шрифт:

cp $(find /etc/console-setup -name '*.psf.gz' | head -n 1) initramfs/etc/font.psf.gz gunzip initramfs/etc/font.psf.gz

а в скрипт «init» добавить команду загрузки шрифта:

setfont /etc/font.psf

Чтобы можно было вводить с клавиатуры текст на русском языке, нужно добавить русскую раскладку клавиатуры:

cp $(find /etc/console-setup -name '*.kmap.gz' | head -n 1) initramfs/etc/keys.kmap.gz gunzip initramfs/etc/keys.kmap.gz

а в скрипт «init» добавить команду загрузки этой раскладки:

loadkeys /etc/keys.kmap

Чтобы в командной строке работали клавиши со стрелками, нужно вместо dash использовать bash.

Чтобы отображались имена файлов на русском языке, нужно добавить в образ локаль:

mkdir -p initramfs/usr/lib/locale cp /usr/lib/locale/locale-archive initramfs/usr/lib/locale

а в скрипт «init» добавить команду загрузки локали:

export LANG=ru_RU.UTF-8

Итого

На основе представленной информации создан небольшой набор скриптов (2 шт.) для создания загрузочного диска. Для работы с ними необходимо:

1. Установить требуемые deb пакеты

apt install grub-efi-amd64-bin dosfstools mtools isolinux syslinux-common console-setup

2. Установить программы copyso и copyko.

3. Загрузить сами скрипты и вспомогательные файлы.

4. Запустить скрипт 1.mkinitramfs.sh. В результате создастся подкаталог initramfs.

5. Изменить содержимое initramfs по своему желанию.

6. Запустить скрипт 2.mkiso.sh. В результате создастся файл-образ livecd.iso.

7. Записать образ на флешку или диск.

Чтобы вернуть initramfs в исходное состояние, необходимо заново запустить 1.mkinitramfs.sh.

Надеюсь, эта статья будет полезной тем, кто изучает основы Linux.


ссылка на оригинал статьи https://habr.com/ru/post/709528/

Как подружить Mikrotik LTE passthrough c роутером на openwrt

У меня на даче самый обычный сетап. Интернет раздается через 3g свисток + wifi роутер на openwrt. 

Здесь роутер с openwrt на борту это пограничное устройство между LAN и WAN.
Такой сетап работал годами и был супер надежным.

И вот я недавно узнал что некоторые сотовые операторы в моей местности уже ввели в эксплуатацию сети 4G и задумался как бы улучшить качество и скорость интернета. После чтения обзоров и недолгих раздумий было решено прикупить Mikrotik LTE6 kit (внешний 4g модем + тарелка) и заменить им устаревший 3g свисток.

По моей задумке сетап не должен был сильно измениться, я представлял что микротик будет просто внешним устройством для openwrt роутера. Оказалось что все немного не так и микротик работает только как отдельное сетевое устройство, со своей специфической OS. Просто взять и заменить 3g свисток на микротик оставив все остальное как было не выйдет. И теперь мой сетап стал выглядеть так.

Здесь уже не роутер, а именно микротик является пограничным устройство между LAN и WAN и теперь нужно все настраивать заново, но уже в терминологии Router OS (микротик специфичная ось). А так не хочется менять годами отлаженную и стабильно работающую конфигурацию openwrt на что-то новое и доселе неизведанное.

Как же быть ? Оказывается выход есть. Начиная с версии Router OS 6.41 в микротиках есть такая фича как lte passthrough. Ее суть в том, что мы можем внешний IP получаемый от провайдера пробросить внутрь сети роутеру с openwrt и там уже делать нужные нам настройки. 

Получается что микротик тут выступает в роли 4g модема, а все настройка производится как и раньше на роутере с openwrt. Ровно то, что мы и хотели получить. Верно ? Да не совсем. В документации написано, что при такой настройке микротика мы теряем к нему доступ по IP (как внешнему так и внутреннему) как к отдельному устройству.

Как же быть ? Выход есть. Можно настроить несколько VLAN ов на одном порту и не потерять доступ к микротику по IP и сохранить преимущества фичи lte passthrough.

Ниже я привожу детальную инструкцию как это сделать на примере Mikrotik antenna LHG LTE6 kit (Router OS 6.49) и роутера TP-Link Archer C7 v2 (openwrt 19.07).

Для конфигурации микротика используем Winbox tool.

На стороне openwrt

Шаг 1: Настраиваем VLAN ы для работы с микротиком

  • Network -> Switch

  • Enable VLAN functionality

  • Добавляем 2 VLAN а как на картинке ниже

  • VLAN 2 untagged (management VLAN)

  • VLAN 3 tagged (internet VLAN)

  • Нажимаем Save & Apply

 

Шаг 2: Настраиваем network interface для management VLAN

  • Network -> Interfaces -> Add new interface

  • Name: любое, на картинке ниже LAN1

  • Protocol: Static address

  • Interface: Switch VLAN: «eth0.2»

  • Жмем «Create Interface»

  • IPv4 address: любой IP адрес из внутренней сети вашего микротика (в моем случае 192.168.100.2, сам микротик имеет IP 192.168.100.1)

  • IPv4 netmask: 255.255.255.0

  • Нажимаем «Save»

  • Нажимаем «Save & Apply»

Шаг 3: Настраиваем network interface для internet VLAN

  • Network -> Interfaces -> Add new interface

  • Name: любое, в моем случае WAN

  • Protocol: DHCP client

  • Interface: Switch VLAN: «eth0.3»

  • Жмем «Create Interface»

  • Ставим галочку «Bring up on boot»

  • ЗАПОМИНАЕМ MAC ADDRESS НА ЭТОМ ШАГЕ

  • Жмем «Save»

  • Жмем «Save & Apply»

На стороне микротика

Шаг 1: Создаем management VLAN для ether1 interface

  • Коннектимся к микротику через winbox

  • Interfaces -> Interface (tab) -> выбираем ether1 -> жмем жирный плюс -> VLAN

  • Name: любое, в моем случае vlan-2-management

  • VLAN ID: 2

  • Interface: ether1

  • Жмем OK

Шаг 2: Создаем internet VLAN для ether1 interface

  • Interfaces -> Interface (tab) -> выбираем ether1 -> Жмем на жирный плюс -> VLAN

  • Name: любое, в моем случае vlan-3-internet

  • VLAN ID: 3

  • Interface: ether1

  • Жмем OK

Шаг 3: Включаем lte passthrough для internet VLAN

  • Interfaces -> LTE (tab) -> выбираем lte1 -> Жмем LTE APNs -> двойной клин на default

  • Passthrough interface: выбираем vlan из шага step 2 (в моем случае vlan-3-internet)

  • Passthr. MAC address: тут пишем mac address полученный на шаге 3 on из настройки на стороне openwrt

  • Жмем OK

Ну вот собственно и все. 

Если все шаги были выполнены без ошибок мы увидим как роутер получает IP от провайдера для WAN интерфейса. А сам микротик доступен по IP (в моем случае как 192.168.100.1). Такой сетап у меня стабильно работает уже около года и нареканий не вызывает. Уверен, что вы сможете адаптировать эту инструкцию под ваш роутер и вашу версию openwrt.

Успехов!


ссылка на оригинал статьи https://habr.com/ru/post/709530/

Быстрыми движениями мыши, возможно, управляет производная

Недавние эксперименты с мышами дают основание считать, что мозг точно управляет некоторыми быстрыми движениями через сравнение передаваемых сигналов, а не при помощи самих сигналов. Подробности — к старту флагманского нашего курса по Data Science.

Введение

Мышь бежит по своеобразной беговой дорожке, встроенной в систему виртуальной реальности. В её представлении она несётся по туннелю, а впереди видит определённую комбинацию огоньков. В ходе обучения мышь усваивает, что если она, видя огоньки, останавливается и не движется в течение 1,5 с, то получает награду — небольшой глоток воды. Затем она бежит к следующей комбинации огоньков для получения ещё одной награды.

Эта [экспериментальная] установка — основа исследования, результаты которого опубликованы в июле в журнале Cell Reports нейробиологами Эли Адамом, Тейлором Джонсом и Мриганка Суром из Массачусетского технологического института (MIT). Исследуется простой вопрос: как мозг — мышей, людей и других млекопитающих — работает настолько быстро, чтобы так резко нас останавливать? Последние исследования показывают, что мозг не настроен на передачу резкой команды «стоп» непосредственно или интуитивно. Вместо этого он использует более сложную сигнальную систему, основанную на вычислениях. Эта система может показаться чрезмерно сложной, но это удивительно рациональный способ управлять поведением, которое должно быть более точным, чем команды, поступающие от мозга.

Довольно легко описать управление обычной механикой ходьбы или бега: мезэнцефальная локомоторная область (MLR) головного мозга посылает сигналы нейронам спинного мозга, которые, в свою очередь, посылают тормозящие или возбуждающие импульсы двигательным нейронам, управляющим мышцами ноги: «стой», «иди», «стой», «иди». Каждый сигнал представляет собой всплеск электрической активности, который генерируется множествами возбуждённых нейронов.

Однако ситуация усложняется, когда появляются цели, например, когда теннисист хочет добежать до конкретного места на корте или когда испытывающая жажду мышь видит на расстоянии желаемую награду. Биологи уже давно поняли, что цели формируются в коре головного мозга. Но как мозг преобразует цель (остановиться в том месте, чтобы получить награду) в точно рассчитанный по времени сигнал, который приказывает MLR «нажать на тормоза»?

«Люди и млекопитающие обладают экстраординарными способностями в том, что касается сенсомоторного управления, — считает Шридеви Сарма, нейробиолог из Университета Джона Хопкинса. — На протяжении десятилетий люди изучали, что именно в нашем мозге делает нас такими ловкими, быстрыми и устойчивыми».

Самый быстрый и пушистый

Чтобы ответить на этот вопрос, исследователи отслеживали нейронную активность в мозге мыши, определяя, сколько времени потребовалось животному, чтобы замедлиться с максимальной скорости до полной остановки. Они ожидали увидеть, что в MLR поступает тормозящий сигнал, который заставляет ноги останавливаться почти мгновенно, подобно электрическому выключателю, который гасит лампочку.

Нейробиолог Мриганка Сур и его коллеги обнаружили, что в мозге мыши точная команда движения кодируется в интервале между всплесками двух нейронных сигналов. «Нет никакой информации об амплитуде всплесков», — объясняет он.

Но несоответствие в данных поставило эту теорию под сомнение. Когда мышь замедлялась, учёные действительно наблюдали сигнал «стоп», поступающий в MLR, однако его интенсивность не возрастала настолько быстро, чтобы объяснить такую стремительную остановку животного.

«Если вы просто возьмёте стоп-сигналы и передадите их в MLR, животное остановится, но математические вычисления показывают, что остановка будет недостаточно быстрой», — объясняет Адам.

«Кора головного мозга не обеспечивает переключения, — утверждает Сур. — Мы думали, что именно кора головного мозга посылает быстрый сигнал для переключения из 0 в 1. Но она не выполняет эту функцию — вот в чём загадка».

Таким образом, исследователи поняли, что должна работать дополнительная сигнальная система.

Чтобы обнаружить её, они снова обратились к анатомии мозга мыши. Между корой головного мозга, где возникают цели, и MLR, которая управляет передвижением, находится ещё одна область — субталамическое ядро (STN). Ранее было известно, что STN соединяется с MLR двумя путями: один посылает возбуждающие сигналы, а другой — тормозящие. Исследователи поняли, что MLR реагирует на взаимодействие между двумя сигналами, а не на интенсивность каждого из них.

Когда бегущая мышь готовится остановиться, MLR получает тормозящий сигнал из STN. Почти сразу после этого она также получает возбуждающий сигнал. Каждый сигнал доходит медленно, а переключение между ними — быстро. Именно на это реагирует MLR: она регистрирует разницу между двумя сигналами. Чем больше разница, тем быстрее изменяется тормозящий сигнал и тем быстрее MLR отдаёт ногам команду остановиться.

«Нет никакой информации об амплитуде всплесков, — рассказывает Сур. — Всё происходит в интервале между всплесками. Этот интервал может нести информацию благодаря тому, что всплески резкие».

Исследователи MIT поняли, что тормозящие сигналы «стоп», поступающие в управляющую передвижением область мозга, не могут объяснить того, как в экспериментах мышь останавливалась настолько быстро. «Математические вычисления показывают, что остановка окажется недостаточно быстрой», — объясняет Эли Адам, член команды исследователей.

Фото любезно предоставлено Эли Адамом.

Впереди крутой поворот

Исследователи описали механизм остановки в терминах двух основных операций исчисления: интегрирования, которое определяет площадь под кривой, и производной, которая вычисляет наклон кривой в точке.

Если бы остановка зависела только от того, стоп-сигнал какой интенсивности получила MLR, это можно было бы описать интегрированием; важной была бы величина сигнала. Однако это не так, поскольку интегрирования самого по себе для быстрого управления недостаточно. Вместо этого MLR суммирует разницу между двумя синхронизированными сигналами, что соответствует вычислению производной: для вычисления наклона кривой в точке используется разница между двумя бесконечно близкими значениями. Быстрое изменение производной компенсирует медленное изменение интегрирования и даёт быструю остановку.

«Есть возбуждающий сигнал и тормозящий сигнал, и они мгновенно сравниваются, — пояснил Сур. — Когда разница достигает определённой величины, срабатывает переключатель, который заставляет животное остановиться».

Эта система управления, основанная на производных, может показаться непрямой, но в ней заложен стратегический смысл. Когда мышь, которая перемещается по виртуальной реальности, или теннисист, который мчится по корту, приближаются к точке остановки, для них, конечно, может оказаться полезным знание скорости их движения. Но для планирования дальнейших действий полезнее знать, насколько быстро они ускоряются или замедляются, иными словами, знать производную их перемещения.

«Это позволяет предвидеть и прогнозировать. Если я знаю производную — скорость изменения скорости, тогда я могу предсказать, какой станет моя скорость на следующем шаге, — рассуждает Сарма. — Если я знаю, что должен остановиться, я могу спланировать и выполнить остановку».

Научим вас аккуратно работать с данными, чтобы вы прокачали карьеру и стали востребованным IT-специалистом. Скидка до 50% по промокоду HABR.


ссылка на оригинал статьи https://habr.com/ru/company/skillfactory/blog/709520/

Смерть или эволюция. Что ждёт программирование в будущем?

Или ещё одна статья про ChatGPT. Этот чат-бот с ИИ пишет код на многих языках программирования, оптимизирует код, конвертирует код с одного языка программирования на другой, пишет скрипты с нуля и т. д. Хотя ChatGPT вряд ли когда-нибудь полноценно заменит инженера-программиста или разработчика, этот инструмент может помочь решить множество задач, которые выполняют программисты, а также стать началом новых возможностей в области программирования.

Если есть что-то, в чём ChatGPT хорош, так это написание кода. ChatGPT «прочитал» больше документации, чем кто-либо прочитает за всю свою жизнь. Вот почему он может легко писать скрипты за короткое время, а также предоставлять пошаговые инструкции того, что он делает. Пользователю надо только дать правильную команду этому чат-боту.

ChatGPT — крутой кодер, но не инженер-программист или разработчик. Этот ИИ не сможет проектировать ПО с инженерной точки зрения с учётом потребностей бизнеса или исправлять ошибки, отличные от тех, которые были на его обучающих вводных данных. Этот инструмент не сможет заменить тех, чья работа выходит за рамки написания кода. Но этот при этом может открыть другие самые разные возможности для тех, кто работает с кодом.

По крайней мере на данный момент!


Есть много инструментов, которые помогают программистам быть эффективнее. К примеру:

  • StackOverflow помогает находить ответы на многие вопросы по программированию.
  • Скрипты помогают автоматизировать рутинные процессы.
  • Шаблоны помогают избегать многократного написания кода.

Настоящий кодер

ChatGPT идёт намного дальше этого. Он не идеален. Не всегда даёт желаемый результат. Но когда он чётко «понимает», чего от него хотят, он — настоящая «машина».

Допустим, вы создаёте сайт по продажам. Вы можете просто попросить ChatGPT написать для вас код на HTML и CSS, указав, какие разделы необходимо включить. Можно даже указать, будет ли это веб-сайтом электронной коммерции или портфолио, чтобы он ещё больше настраивал вывод.

Вот пример:

Ниже приведён код, сгенерированный ChatGPT:

<!DOCTYPE html> <html> <head>   <title>My Online Store</title>   <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body>   <header>     <h1>My Online Store</h1>   </header>   <nav>     <ul>       <li><a href="#">Home</a></li>       <li><a href="#">Products</a></li>       <li><a href="#">About</a></li>       <li><a href="#">Contact</a></li>     </ul>   </nav>   <main>     <h2>Featured Products</h2>     <div class="product-grid">       <div class="product">         <img src="product1.jpg" alt="Product 1">         <h3>Product 1</h3>         <p>$19.99</p>         <button>Add to Cart</button>       </div>       <div class="product">         <img src="product2.jpg" alt="Product 2">         <h3>Product 2</h3>         <p>$29.99</p>         <button>Add to Cart</button>       </div>       <div class="product">         <img src="product3.jpg" alt="Product 3">         <h3>Product 3</h3>         <p>$39.99</p>         <button>Add to Cart</button>       </div>     </div>   </main>   <footer>     <p>Copyright 2021 My Online Store</p>   </footer> </body> </html>
body {   font-family: Arial, sans-serif;   margin: 0;   padding: 0; }  header {   background-color: #333;   color: white;   padding: 20px;   text-align: center; }  nav ul {   margin: 0;   padding: 0;   display: flex;   list-style: none;   justify-content: space-between;   align-items: center; }  nav li {   display: inline-block; }  nav a {   color: #333;   text-decoration: none;   font-size: 18px;   padding: 10px; }  .product-grid {   display: flex;   flex-wrap: wrap;   justify-content: space-between; }  .product {   width: 30%;   margin-bottom: 30px;   text-align: center; }  .product img {   width: 100%; }

Вот так выглядит готовый сайт по этому коду.

Not bad.

ChatGPT может изменить обязанности на должностях начального уровня. Так как может выполнять некоторые задачи быстрее и лучше, чем junior-разработчики. Например, поддерживать существующий проект, устраняя неполадки или отлаживая код. Не нужно тратить время и ресурсы на обучение, потому что чат-бот уже хорошо умеет программировать. Чего нельзя сказать об junior-разработчиках.

Но вот в чём дело: таким инструментам, как ChatGPT, нужен «начальник», который даёт правильные команды для получения желаемого результата. Кроме того, нужен кто-то, кто будет интерпретировать результаты и выявлять ошибки чат-бота.

Ускорение обучения программированию

Может появиться мнение, что ChatGPT может превратить любого желающего в программиста просто потому, что теперь каждый может генерировать код с помощью чат-бота. На самом деле не так. Человеку, не обладающего знаниями в программировании, будет сложно работать с таким инструментом. Но можно с уверенностью сказать, что ChatGPT может ускорить процесс обучения программированию. Этот инструмент поможет решить вопросы по кодированию и дать подробное объяснение того, что он сделал.

Когда ChatGPT станет платным (что вероятнее всего), он может быть намного эффективнее, чем StackOverflow или Google, потому что:

  • Не будет рекламы.
  • Минимум неправильных ответов.
  • Никаких длинных «водянистых» статей о кодировании.

Будущее программирования

Искусственный интеллект (ИИ) меняет то, как мы работаем. Новые инструменты и системы создают мощные алгоритмы, которые позволяют машинам обучаться, чтобы оптимизировать процессы без команды программистов. Управление социальными сетями, инструменты маркетинга по электронной почте и генераторы преобразования текста в изображения — вот некоторые из функций, поддерживаемых ИИ, которые открывают новые горизонты для компаний. ИИ больше не является прерогативой докторов наук и специализированных программистов. Эти люди разработали интерфейсы и платформы, чтобы позволить другим, не имеющим этих специфических навыков, получить доступ к результату их работы.

На данный момент ИИ по-прежнему является специальностью программирования. Но использование ИИ на рабочем месте становится всё более распространённым. Мы видим больше инструментов ИИ в интегрированных средах разработки (IDE). Сейчас продвинутые IDE начинают дополнять то, что кодируют программисты. Не только предлагая, как завершить одну строку, но и предлагая сразу несколько строк кода.

Эти инструменты не обязательно должны приводить к смерти программирования. Модели и инструменты общего назначения, такие как OpenAI Codex и GitHub Copilot, предоставляют разработчикам ПО более широкий доступ к системам, использующим ИИ для написания кода, что экономит время и энергию. Тем не менее программисту придётся выполнять работу более высокого уровня, думая о том, какую функцию будет выполнять код и как организовать код, вместо того, чтобы писать каждую строку кода в своих программах.

Но программирование, в классическом понимании, устаревает. Традиционная идея «написания программы» находится на грани исчезновения в течение нескольких десятилетий. Для всех, кроме очень специализированных приложений, большая часть ПО в том виде, в каком мы его знаем, будет заменена системами ИИ, которые обучаются, а не программируются. В ситуациях, когда нужна «простая» программа, эти программы сами будут генерироваться ИИ, а не кодироваться вручную.

Когда-то, пионеры информатики твердо верили, что всем будущим учёным-компьютерщикам потребуется глубокое понимание полупроводников, двоичной арифметики и проектирования микропроцессоров, чтобы разрабатывать ПО. Сегодня почти 90 % тех, которые разрабатывают ПО, не имеют представления о том, как на самом деле работает процессор, не говоря уже о физике, лежащей в основе конструкции транзистора. А компьютерщики будущего будут настолько далеки от классических определений «программного обеспечения», что им будет трудно развернуть связанный список или внедрить быструю сортировку.

Все программы в будущем, в конечном счёте, будут написаны ИИ, а людям будет отведена контролирующая роль. Любому, кто сомневается в этом прогнозе, достаточно взглянуть на очень быстрый прогресс, достигнутый в других аспектах создания контента ИИ, таких как создание изображений. Разница в качестве и сложности между DALL-E v1 и DALL-E v2, о которых было объявлено всего 15 месяцев спустя, ошеломляет. Вещи, которые ещё несколько месяцев назад казались фантастикой, быстро становятся реальностью.

Не только CoPilot на Github или ChatGPT заменят программистов. Речь идёт о замене всей концепции написания программ обучающими моделями. В будущем студентам компьютерных наук не нужно будет изучать такие рутинные навыки, как добавление узла в двоичное дерево или программирование на C++. Такое образование устареет, как обучение студентов технических специальностей использованию логарифмической линейки.

Инженеры будущего в несколько нажатий клавиш запустят экземпляр модели с четырьмя квинтиллионами параметров, которая уже кодирует весь объём человеческих знаний, готовый к любой задаче, требуемой от машины. Основная часть интеллектуальной работы, направленной на то, чтобы заставить машину делать то, что нужно, будет заключаться в том, чтобы придумать правильные примеры, правильные данные для обучения и правильные способы оценки процесса обучения. Достаточно мощные модели, способные обобщать посредством обучения за несколько шагов, потребуют лишь нескольких хороших примеров выполнения задачи. Люди будут учить на собственном примере, а всё остальное сделает машина.


ссылка на оригинал статьи https://habr.com/ru/post/709310/